$(function () {
    initWholeTree()
})

//初始化菜单
function initWholeTree() {
    // setting对象中包含zTree的设置属性
    var setting = {
        "view": {
//设置自定义图标
            "addDiyDom": showMyIcon,
            "addHoverDom": addHoverDom,
            "removeHoverDom": removeHoverDom
        },
        "data": {
            "key": {
                "url": "notExistsProperty" // 阻止点击节点后跳转
            }
        }
    };
    $.ajax({
        "url": "/menu/get/whole/tree",
        "type": "post",
        "dataType": "json",
        "success": function (response) {
            var  result=response.result;
            if(result=="SUCCESS"){
                // 用于显示树形结构的节点数据
                var zNodes = response.data;
                // 执行树形结构的初始操作
                $.fn.zTree.init($("#treeDemo"), setting, zNodes);
            }
            if(result == "FAILED") {
                layer.msg("加载菜单数据失败！原因是："+response.message);
            }
        },
        "error":function(response){
            layer.msg("加载菜单数据失败！原因是："+response.message);
        }

    });
}

//图标
function showMyIcon(treeId,treeNode) {
    console.log(treeId)
    console.log(treeNode)
    // 获取当前节点的id
    var tid=treeNode.tId;
    // 获取新的class值用于替换
    var newClass=treeNode.icon;
    //在当前节点id之后附加“_ico”得到目标span的id
    var targetSpanId=tid+"_ico";
    $("#"+targetSpanId).removeClass().addClass(newClass).css("background","");
}

//鼠标悬浮在节点上时调用此方法
function addHoverDom(treeId, treeNode){
    // 在执行添加前，先进行判断，如果已经添加过，就停止执行
    // 组装按钮组所在的span的id
    var btnGrpSpanId=treeNode.tId+"_btnGrp";
    var btnGrpSpanLength = $("#"+btnGrpSpanId).length;
    if(btnGrpSpanLength>0){
        return;
    }
    //获取按钮组
   var $btnGrpSpan=generateBtnGrp(treeNode);
// 由于按钮组是放在当前节点中的超链接（a标签）后面，所以先定位到a标签
    // 按id生成规则组装a标签的id
    var anchorId=treeNode.tId+"_a";
    $("#"+anchorId).append($btnGrpSpan);
}
//鼠标移出节点时调用此方法
function removeHoverDom(treeId, treeNode) {
    // 组装按钮组所在的span的id
    var btnGrpSpanId=treeNode.tId+"_btnGrp";
    // 删除对应的元素
    $("#"+btnGrpSpanId).remove();
}
//声明按钮组
function generateBtnGrp(treeNode) {
    //获取id
    var tid=treeNode.tId;
    // 组装按钮组所在的span的id
    var btnGrpSpanId=tid+"_btnGrp";
    // 生成span标签对应的jQuery对象
    var $sqan=$("<span id='"+btnGrpSpanId+"'></span>")
    // 获取当前节点在数据库中的id值
    var menuId=treeNode.id;
    // 获取当前节点的level值
    var level=treeNode.level;
    // 声明三种按钮
    var addBtn = "<a onclick='showAddModal(this)' id='"+menuId+"' class='btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' title='添加子节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-plus rbg'></i></a>";
    var editBtn = "<a onclick='showEditModal(this)' id='"+menuId+"' class='btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' title='编辑节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-edit rbg'></i></a>";
    var removeBtn = "<a onclick='showConfirmModal(this)' id='"+menuId+"' class='btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' title='删除节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-times rbg'></i></a>";
    if(level==0){
        $sqan.append(addBtn)
    }
    if(level==1){
        if(treeNode.children.length>0){
            $sqan.append(addBtn+""+editBtn)
        }else{
            $sqan.append(addBtn+""+editBtn+""+removeBtn)
        }
    }
    if(level==2){
        $sqan.append(removeBtn+""+editBtn)
    }
    return $sqan

}
//添加模态框
function showAddModal(addBtn) {
    window.id=addBtn.id;
    $("#menuAddModal").modal("show")
}
//确定添加
$("#menuAddBtn").click(function () {
    //收集数据
    var name = $.trim($("#menuAddModal [name='name']").val());
    var url = $.trim($("#menuAddModal [name='url']").val());
    var icon = $("#menuAddModal [name='icon']:checked").val();
    if(name.length=0){
        layer.msg("请填写菜单项名称！")
        return ;
    }
    if(url.length=0){
        layer.msg("请填写菜单项对应的访问地址！");
        return ;
    }
    //发送ajax请求
    $("#menuAddModal").modal("hide")
        $.ajax({
            "url":"/menu/save",
            "type":"post",
            "dataType":"json",
            "data":{
                "name":name,
                "url":url,
                "pid":window.id,   // 当前操作的节点是新节点的父节点
                "icon":icon
            },
            "success":function (res) {
                if( res.result=="SUCCESS"){
                    layer.msg("操作成功！");

                    initWholeTree();
                }
                if(res.result == "FAILED") {
                    layer.msg(res.message);
                }

            },
            "error":function(response) {
                layer.msg(response.message);
            }});
});
//数据回显
function showEditModal(editBtn) {
    $("#menuEditModal").modal("show")
    window.menuId=editBtn.id;

// 发送请求查询Menu对象
    $.ajax({
        "url":"/menu/get/"+window.menuId,
        "type":"get",
        "dataType":"json",
        "success":function(res) {



            if(res.result == "SUCCESS") {

                // 从响应数据中获取Menu对象
                var menu = res.data;

                // 获取各个属性值
                var name = menu.name;

                var url = menu.url;

                var icon = menu.icon;
                // 设置各个对应的表单项
                $("#menuEditModal [name='name']").val(name);

                $("#menuEditModal [name='url']").val(url);

                // radio需要让value值和后端查询到的icon一致的设置为被选中
                $("#menuEditModal [name='icon'][value='"+icon+"']").attr("checked",true);
            }

            if(res.result == "FAILED") {
                layer.msg(response.message);
            }
        },
        "error":function(response) {
            layer.msg(response.message);
        }
    });
}
//确认修改
$("#menuEditBtn").click(function () {
    var name=$.trim($("#menuEditModal [name='name'] ").val())
    var url=$.trim($("#menuEditModal [name='url'] ").val())
    var icon=$("#menuEditModal [name='icon']:checked ").val()
    if(name.length=0){
        layer.msg("请填写菜单项名称！")
        return ;
    }
    if(url.length=0){
        layer.msg("请填写菜单项对应的访问地址！");
        return ;
    }
    $("#menuAddModal").modal("hide");
// 发送Ajax请求
    $.ajax({
        "url":"/menu/update",
        "type":"post",
        "dataType":"json",
        "data":{
            "id":window.menuId,
            "name":name,
            "url":url,
            "icon":icon
        },
        success:function (res) {
            if (res.result == "SUCCESS") {
                layer.msg("修改成功")
                initWholeTree();
            } else {
                layer.msg(res.message())
            }
        }})

})
//删除模态框
function showConfirmModal(removeBtn) {
    //显示模态框
    $("#menuconfirmModal").modal("show")
    window.menuId=removeBtn.id;
    // 发送请求查询Menu对象
    $.ajax({
        "url":"/menu/get/"+window.menuId,
        "type":"get",
        "dataType":"json",
        "success":function(res) {
            if(res.result == "SUCCESS") {
                // 从响应数据中获取Menu对象
                var menu = res.data;

                // 获取各个属性值
                var name = menu.name;

                var url = menu.url;

                var icon = menu.icon;
                // 设置各个对应的表单项
                $("#menuconfirmModal [name='name']").val(name);

                $("#menuconfirmModal [name='url']").val(url);

                // radio需要让value值和后端查询到的icon一致的设置为被选中
                $("#menuconfirmModal [name='icon'][value='"+icon+"']").attr("checked",true);
            }

            if(res.result == "FAILED") {
                layer.msg(res.message);
            }
        },
        "error":function(response) {
            layer.msg(response.message);
        }
    });
}
$("#menuconfirmModalBtn").click(function () {
    var RequestBody=window.menuId;
    var menuList=new Array();
    menuList.push(RequestBody)
    // var requestBody = JSON.stringify(window.menuId);
    $.ajax({
            url: "/menu/batch/remove",
            type: "post",
            data:JSON.stringify(menuList),
            contentType: "application/json;charset=UTF-8",
            dataType: "json",
            success:function(res){
                if(res.result=="SUCCESS"){
                layer.msg("删除成功")
                    initWholeTree();
                }else{layer.msg("删除失败 ")}

            }


    })
    $("#menuconfirmModal").modal("hide")
})


